import combineMeans from "./combine_means.js";

/**
 * 当需要合并两个已知方差的数值列表时，不必重新线性计算合并后列表的方差。
 * 可以使用此函数通过提供第一个列表的方差、均值、数量，
 * 以及第二个列表的方差、均值、数量来计算合并后的方差。
 *
 * @since 3.0.0
 * @param {number} variance1 第一个列表的方差
 * @param {number} mean1 第一个列表的均值
 * @param {number} n1 第一个列表中的项目数量
 * @param {number} variance2 第二个列表的方差
 * @param {number} mean2 第二个列表的均值
 * @param {number} n2 第二个列表中的项目数量
 * @returns {number} 合并后的均值
 *
 * @example
 * combineVariances(14 / 3, 5, 3, 8 / 3, 4, 3); // => 47 / 12
 */
function combineVariances(variance1, mean1, n1, variance2, mean2, n2) {
    const newMean = combineMeans(mean1, n1, mean2, n2);

    return (
        (n1 * (variance1 + Math.pow(mean1 - newMean, 2)) +
            n2 * (variance2 + Math.pow(mean2 - newMean, 2))) /
        (n1 + n2)
    );
}

export default combineVariances;
